package com.mlr.mlrcturebackend.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mlr.mlrcturebackend.model.dto.tag.TagQueryRequest;
import com.mlr.mlrcturebackend.model.entity.Tag;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mlr.mlrcturebackend.model.vo.TagVO;

import java.util.List;

/**
 * @author mlr
 * @description 针对表【tag(标签表)】的数据库操作Service
 */
public interface TagService extends IService<Tag> {

    /**
     * 校验标签
     *
     * @param tag 标签对象
     * @param add 是否为创建时检验
     */
    void validTag(Tag tag, boolean add);

    /**
     * 获取查询对象
     *
     * @param tagQueryRequest 查询请求
     * @return QueryWrapper
     */
    QueryWrapper<Tag> getQueryWrapper(TagQueryRequest tagQueryRequest);

    /**
     * 根据标签名称获取标签，如果不存在则创建
     *
     * @param tagName 标签名称
     * @return 标签对象
     */
    Tag getOrCreateTagByName(String tagName);

    /**
     * 批量获取或创建标签
     *
     * @param tagNames 标签名称列表
     * @return 标签对象列表
     */
    List<Tag> batchGetOrCreateTags(List<String> tagNames);

    /**
     * 获取标签VO
     *
     * @param tag 标签对象
     * @return 标签VO
     */
    TagVO getTagVO(Tag tag);

    /**
     * 批量获取标签VO列表
     *
     * @param tagList 标签对象列表
     * @return 标签VO列表
     */
    List<TagVO> getTagVOList(List<Tag> tagList);
}